package com.lib.utils;

import android.content.Context;

import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;

/**
 * @author FengLing
 * 描述：
 * Created on 2019-05-16 16:18:05
 */
public class LocationInfoManager {
    private LocationClientOption mOption;
    private LocationClient mLocationClient;

    private static class Inner {
        private static LocationInfoManager sLocationInfoManager = new LocationInfoManager();
    }

    public static LocationInfoManager getInstance() {
        return Inner.sLocationInfoManager;
    }

    private void init(Context context, int time) {
        if (mOption != null) {
            mOption.setScanSpan(time);
            mLocationClient.setLocOption(mOption);
            return;
        }
        XLog.i("init ->初始化Option");
        // 初始化Option
        mOption = new LocationClientOption();
        //可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
        mOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);

        //可选，默认gcj02，设置返回的定位结果坐标系
        mOption.setCoorType(SDKInitializer.getCoordType().name());

        //可选，默认0，即仅定位一次，设置发起定位请求的间隔需要大于等于1000ms才是有效的
        mOption.setScanSpan(time);

        //可选，设置是否需要地址信息，默认不需要
        mOption.setIsNeedAddress(true);

        //可选，默认false,设置是否使用gps
        mOption.setOpenGps(true);
        // //可选，默认false，设置是否当GPS有效时按照1S/1次频率输出GPS结果
//        mOption.setLocationNotify(true);
        //
        // option.setIsNeedLocationDescribe(true);
        // //可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
        //
        // option.setIsNeedLocationPoiList(true);
        // //可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
        //
        // option.setIgnoreKillProcess(false);
        // //可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死
        //
        // option.SetIgnoreCacheException(false);
        // //可选，默认false，设置是否收集CRASH信息，默认收集
        //
        // option.setEnableSimulateGps(false);
        // //可选，默认false，设置是否需要过滤GPS仿真结果，默认需要

        // 声明LocationClient类
        mLocationClient = new LocationClient(context.getApplicationContext());
        // 注册监听函数
//        mLocationListener = new LocationListener();
//        mLocationClient.registerLocationListener(mLocationListener);

        mLocationClient.setLocOption(mOption);
    }

    public void start(Context context, BDAbstractLocationListener listener, int time) {
        init(context, time);
        if (listener != null) {
            mLocationClient.registerLocationListener(listener);
        }
        mLocationClient.start();
    }

    public LocationInfoManager unRegist(BDAbstractLocationListener l) {
        if (mLocationClient != null) {
            mLocationClient.unRegisterLocationListener(l);
        }
        return this;
    }

    public void stop() {
        if (mLocationClient != null) {
            mLocationClient.stop();
        }
    }

//    private static class LocationListener extends BDAbstractLocationListener {
//        private final String TAG = LocationListener.class.getName();
//
//        @Override
//        public void onReceiveLocation(BDLocation bdLocation) {
//            if (bdLocation == null || bdLocation.getAddress() == null) {
//                return;
//            }
//            XLog.i( "onReceiveLocation-->" + JSONUtils.toJSONString(bdLocation));
//            SPUtils.getSP().edit()
//                    .putString(SPKeys.KEY_LOCATED_CITY, bdLocation.getCity()/*.replace("市", "")*/)
//                    .putString(SPKeys.KEY_LOCATED_DISTRICT, bdLocation.getDistrict())
//                    .putString(SPKeys.KEY_LOCATED_INFO, bdLocation.getAddrStr())
//                    .apply();
//
//            if (Inner.sLocationInfoManager.mBDLocationListener != null) {
//                for (BDAbstractLocationListener listener : Inner.sLocationInfoManager.mBDLocationListener) {
//                    listener.onReceiveLocation(bdLocation);
//                }
//            }
//        }
//    }
}